home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (DO)
/
Softdisk Magazette Volume 2, No. 02 (1982-10)(Softdisk)(Side B).zip
/
Softdisk Magazette Volume 2, No. 02 (1982-10)(Softdisk)(Side B).do
/
FIREFLIES.bas
< prev
next >
Wrap
BASIC Source File
|
1996-12-24
|
8KB
|
209 lines
2 LOMEM: 16385
5 D$ = CHR$(4)
7 TEXT : HOME : PRINT : INPUT "TODAY'S DATE (M/D/Y): ";SD$
10 PRINT D$"BLOAD FIREFLY.SHAPES": POKE 232,1: POKE 233,96
20 DIM X%(30),Y%(30),L%(30),TL%(30)
40 MR = 770:MT = 6:ML = 7
60 FOR A = 770 TO 798: READ I: POKE A,I: NEXT
70 DATA 173,48,192,136,208,4,198,7,240,8,202,208,246,166,6,76,2,3,96,104,168,104,166,223,154,72,152,72,96
75 GOSUB 30000
80 REM NG
82 HOME : PRINT : PRINT "FIREFLIES - BY DAN TOBIAS - JULY 1982"
87 PRINT : PRINT "HIT ANY KEY TO START. ";: GET I$: PRINT : HOME
90 SN = 0:JN = 8:OF = 0:SC = 0
95 SCALE= 1
100 REM NS
101 I = 0
102 KB = 0:SN = SN +1
105 X = 140:Y = 80: IF OF <30 THEN OF = OF +5
106 TL = 50 +(OF *15)
107 NF = OF:N2 = NF:NL = NF
110 FOR A = 1 TO NF
120 X%(A) = RND(1) *280:Y%(A) = RND(1) *160
130 L%(A) = RND(1) *2:TL%(A) = RND(1) *3
150 NEXT
155 KX% = ( RND(1) *320) -20:KY% = -80:KL% = RND(1) *2: IF RND(1) <.5 THEN KY% = 240
157 KT% = RND(1) *3
160 HGR : HOME
161 VTAB 21: HTAB 1: PRINT "SCORE: "SC; TAB( 20);"HI SCORE: ";HS(0,1)
162 HCOLOR= 3
163 VTAB 22: HTAB 1: PRINT "FIREFLIES ON SCREEN: ";N2; TAB( 26);"TIME LEFT: ";TL: PRINT "FIREFLIES LEFT: ";N2; TAB( 26);"SCREEN #: ";SN
164 POKE MT,110: POKE ML,100: CALL MR: POKE MT,132: POKE ML,50: CALL MR: POKE MT,125: POKE ML,50: CALL MR: POKE MT,110: POKE ML,150: CALL MR
165 POKE MT,125: POKE ML,50: CALL MR: POKE MT,132: POKE ML,100: CALL MR: POKE MT,149: POKE ML,100: CALL MR: POKE MT,165: POKE ML,200: CALL MR
167 DRAW 1 AT X,Y
170 FOR A = 1 TO NF
173 XC = INT( RND(1) *10) -5:YC = INT( RND(1) *10) -5:LC = L%(A):TL%(A) = TL%(A) +1: IF TL%(A) >2 THEN LC = NOT LC:TL%(A) = 0
175 F% = 0
177 IF X%(A) <0 OR X%(A) >279 OR Y%(A) <0 OR Y%(A) >159 THEN F% = 1: GOTO 200
180 HCOLOR= 0
190 HPLOT X%(A),Y%(A)
200 X%(A) = X%(A) +XC:Y%(A) = Y%(A) +YC:L%(A) = LC
210 IF X%(A) <0 OR X%(A) >279 OR Y%(A) <0 OR Y%(A) >159 THEN N2 = N2 -( NOT F%): GOTO 300
215 IF F% = 1 THEN N2 = N2 +1
220 HCOLOR= L%(A) *3
230 HPLOT X%(A),Y%(A)
300 REM
302 VTAB 22: HTAB 22: PRINT N2;" ": VTAB 23: HTAB 22: PRINT NL;" "
303 IF N2 = 0 THEN A = 999: NEXT : GOTO 900
305 GOSUB 500
307 IF A/5 = INT(A/5) THEN GOSUB 312
310 NEXT : GOSUB 800: IF NF <5 THEN GOSUB 312
311 GOTO 170
312 IF KB = 1 THEN POKE MT,180: POKE ML,90: CALL MR
315 KB = 0
320 XC = INT( RND(1) *12) * SGN(X -KX%):YC = INT( RND(1) *12) * SGN(Y -KY%):LC = KL%:KT% = KT% +1: IF KT% >2 THEN LC = NOT LC:KT% = 0
330 IF KX% <3 OR KX% >270 OR KY% <0 OR KY% >155 THEN 360
340 HCOLOR= 0: DRAW 2 AT KX%,KY%
360 KX% = KX% +XC:KY% = KY% +YC:KL% = LC
370 IF KX% <3 OR KX% >270 OR KY% <0 OR KY% >155 THEN 400
380 HCOLOR= KL% *3: DRAW 2 AT KX%,KY%
390 KB = 1
400 IF KX% <X OR KX% >X +16 OR KY% >Y OR KY% <Y -12 OR (KY% <Y -9 AND (KX% <X +3 OR KX% >X +13)) THEN RETURN
410 HCOLOR= 3: DRAW 2 AT KX%,KY%
420 POKE MT,200: POKE ML,200: CALL MR
430 POP : GOTO 9000
500 REM
505 TL = TL -1: VTAB 22: HTAB 37: PRINT TL" "
507 IF TL < = 0 THEN POKE MT,210: POKE ML,200: CALL MR: POP : GOTO 9000
508 OI = I
509 IF PEEK( -16384) <128 THEN 515
510 I = PEEK( -16384): POKE -16368,0:I = I -128
515 XC = 0:YC = 0
516 IF I = 19 THEN VTAB 1: GET I$:I = OI: GOTO 509
517 IF I = 32 THEN I = 0: GOTO 600
520 IF I = 74 THEN XC = -1
530 IF I = 75 THEN XC = 1
540 IF I = 73 THEN YC = -1
550 IF I = 77 THEN YC = 1
551 IF I = 72 THEN JN = 4:I = OI: GOTO 517
552 IF I = 76 THEN JN = 8:I = OI: GOTO 517
553 IF XC = 0 AND YC = 0 THEN RETURN
556 XC = XC *JN:YC = YC *JN
560 IF X +XC <1 THEN XC = 1 -X
562 IF X +XC >262 THEN XC = 262 -X
564 IF Y +YC <12 THEN YC = 12 -Y
566 IF Y +YC >158 THEN YC = 158 -Y
570 HCOLOR= 0: DRAW 1 AT X,Y
580 HCOLOR= 3:X = X +XC:Y = Y +YC: DRAW 1 AT X,Y
590 RETURN
600 REM C
610 FOR B = 1 TO NF
620 XB = X%(B):YB = Y%(B)
630 IF XB <X OR XB >X +16 OR YB >Y OR YB <Y -12 OR (YB <Y -9 AND (XB <X +3 OR XB >X +13)) THEN 670
640 SC = SC +10:NL = NL -1:N2 = N2 -1: VTAB 22: HTAB 22: PRINT N2" ": VTAB 23: HTAB 22: PRINT NL" "
641 VTAB 21: HTAB 8: PRINT SC
642 HCOLOR= 3: HPLOT XB,YB
645 POKE MT,110: POKE ML,50: CALL MR
647 HCOLOR= 0: HPLOT XB,YB
650 X%(B) = -16384:Y%(B) = -16384
670 NEXT B
680 IF KX% <X OR KX% >X +16 OR KY% >Y OR KY% <Y -12 OR (KY% <Y -9 AND (KX% <X +3 OR KX% >X +13)) THEN RETURN
685 HCOLOR= 3: DRAW 2 AT KX%,KY%
690 POKE MT,100: POKE ML,60: CALL MR: POKE MT,150: POKE ML,40: CALL MR: POKE MT,100: POKE ML,60: CALL MR
700 SC = SC +500
705 VTAB 21: HTAB 8: PRINT SC
710 HCOLOR= 0: DRAW 2 AT KX%,KY%:KX% = -16384:KY% = -16384
715 KB = 0
720 RETURN
800 REM
810 A = 1
820 IF X%(A) < -10000 THEN 850
830 A = A +1: IF A < = NF THEN 820
840 RETURN
850 IF A = NF THEN NF = NF -1: RETURN
860 FOR B = A +1 TO NF:X%(B -1) = X%(B):Y%(B -1) = Y%(B):L%(B -1) = L%(B)
870 TL%(B -1) = TL%(B): NEXT
880 NF = NF -1: GOTO 830
900 REM DONE WITH BOARD
910 IF NL = 0 THEN SC = SC +100
920 SC = SC +50
925 SC = SC +TL
930 GOTO 100
9000 REM END
9010 GOSUB 31000: POKE -16304,0: VTAB 24
9015 HTAB 1
9020 PRINT " GAME OVER. Q=QUIT, P=PLAY";
9025 HTAB 1
9040 GOTO 32000
9050 REM
9060 FOR A = 1 TO 300: GOSUB 9100: NEXT A
9070 GOTO 32000
9100 REM
9110 I = PEEK( -16384): POKE -16368,0
9120 IF I = ASC("Q") +128 THEN POP : GOTO 33000
9130 IF I = 208 THEN POP : TEXT : GOTO 80
9140 IF I >127 THEN PRINT "<CTRL-G>";: RETURN
9150 RETURN
30000 REM H
30010 ONERR GOTO 30100
30020 PRINT : PRINT D$"OPEN FIREFLY.HI.SCORES": PRINT D$"READ FIREFLY.HI.SCORES"
30030 FOR A = 1 TO 10
30040 INPUT HS(0,A): INPUT SN$(0,A): INPUT SD$(0,A)
30050 NEXT A
30060 PRINT D$"CLOSE": POKE 216,0: RETURN
30100 CALL 789
30110 PRINT D$"CLOSE": POKE 216,0
30120 GOTO 80
31000 REM U
31002 POKE -16368,0
31005 XX = 0
31010 FOR A = 0 TO 1
31020 B = 1
31030 IF SC >HS(A,B) THEN GOSUB 31500: GOTO 31100
31040 B = B +1: IF B <11 THEN 31030
31100 NEXT A: RETURN
31500 REM
31503 IF XX = 1 THEN 31540
31506 IF A = 0 THEN XX = 1
31510 TEXT : VTAB 8: HTAB 1: PRINT "YOUR SCORE IS IN THE TOP TEN!<CTRL-G><CTRL-G><CTRL-G>"
31520 PRINT : PRINT "ENTER YOUR NAME. (LIMIT 16 CHARACTERS)"
31530 PRINT : INPUT "";SN$
31532 IF LEN(SN$) >16 THEN SN$ = LEFT$(SN$,16)
31535 IF SC > = HS(0,1) THEN VTAB 21: HTAB 30: PRINT SC
31540 IF B = 10 THEN HS(A,B) = SC:SN$(A,B) = SN$:SD$(A,B) = SD$: RETURN
31550 FOR C = 9 TO B STEP -1
31560 HS(A,C +1) = HS(A,C):SN$(A,C +1) = SN$(A,C):SD$(A,C +1) = SD$(A,C)
31570 NEXT C:HS(A,B) = SC:SN$(A,B) = SN$:SD$(A,B) = SD$: RETURN
32000 REM DISPLAY HI SCORES
32005 TEXT : POKE 35,20
32010 HOME : PRINT
32020 PRINT
32030 PRINT "HIGH SCORES FOR CURRENT RUN:"
32040 PRINT
32050 FOR A = 1 TO 10
32055 IF HS(1,A) = 0 THEN PRINT : GOTO 32070
32060 PRINT " ";A; TAB( 5);HS(1,A); TAB( 15);SN$(1,A); TAB( 32);SD$(1,A)
32070 NEXT A
32075 FOR A = 1 TO 300: GOSUB 9100: NEXT A
32077 HOME : PRINT
32078 PRINT
32080 PRINT "ALL-TIME HIGH SCORES FOR THIS DISK:"
32085 PRINT
32090 FOR A = 1 TO 10
32095 IF HS(0,A) = 0 THEN PRINT : GOTO 32120
32100 PRINT " ";A; TAB( 5);HS(0,A); TAB( 15);SN$(0,A); TAB( 32);SD$(0,A)
32120 NEXT A
32125 PRINT
32127 FOR A = 1 TO 300: GOSUB 9100: NEXT A
32129 TEXT : POKE -16304,0
32130 GOTO 9050
33000 REM X
33002 TEXT
33005 HOME : PRINT : PRINT "SAVING HI SCORES TO DISK."
33010 ONERR GOTO 33100
33015 PRINT
33020 PRINT D$"OPEN FIREFLY.HI.SCORES": PRINT D$"WRITE FIREFLY.HI.SCORES"
33030 FOR A = 1 TO 10: PRINT HS(0,A): PRINT CHR$(34)SN$(0,A): PRINT CHR$(34)SD$(0,A): NEXT A
33035 PRINT D$"CLOSE"
33040 POKE 216,0: HOME : PRINT : PRINT "BYE.": END
33100 REM ONERR
33105 CALL 789
33107 PRINT D$"CLOSE"
33110 HOME : PRINT
33120 PRINT "DISK ERROR #" PEEK(222)"<CTRL-G>"
33130 PRINT : PRINT "CHECK TO SEE IF: "
33140 PRINT " THERE IS A DISK IN THE DRIVE": PRINT " THE DRIVE DOOR IS CLOSED": PRINT " THE DISK IS A DOS 3.3 DISK"
33150 PRINT " DISK IS NOT WRITE-PROTECTED OR COPY-PROTECTED"
33160 PRINT "OR ANY OTHER PROBLEMS."
33170 PRINT : PRINT "HIT ANY KEY TO TRY AGAIN. ";: GET I$: PRINT : GOTO 33000
50000 REM *